<?php

namespace Amis\functions;

use Amis\Basics\AmisBasics;

class AmisAppPages extends AmisBasics
{
    /**
     * Array<页面配置>具体的页面配置。 通常为数组，数组第一层为分组，一般只需要配置 label 集合，
     * 如果你不想分组，直接不配置，真正的页面请在第二层开始配置，即第一层的 children 中。
     * 具体的页面配置也支持属性结构，每层有以下配置。
     * @param array $pages
     * @return $this
     */
    public function pages(...$pages)
    {
        $this->set(__FUNCTION__,...$pages);
        return $this;
    }

    /**
     * 菜单名称
     * @param string $label
     * @return $this
     */
    public function label(string $label)
    {
        $this->label = $label;
        return $this;
    }

    /**
     * 设置下级分组页面
     * @param ...$children
     * @return $this
     */
    public function children(...$children)
    {
        $this->set(__FUNCTION__,...$children);
        return $this;
    }

    /**
     * 菜单图标
     * @param string $icon
     * @return $this
     */
    public function icon(string $icon)
    {
        $this->icon = $icon;
        return $this;
    }

    /**
     * 页面路由路径，当路由命中该路径时，启用当前页面。当路径不是 / 打头时，会连接父级路径。
     * 比如：父级的路径为 folder，而此时配置 pageA, 那么当页面地址为 /folder/pageA 时才会命中此页面。
     * 当路径是 / 开头如： /crud/list 时，则不会拼接父级路径。另外还支持 /crud/view/:id 这类带参数的路由，
     * 页面中可以通过 ${params.id} 取到此值。
     * @param string $url
     * @return $this
     */
    public function url(string $url)
    {
        $this->url = $url;
        return $this;
    }

    /**
     * 页面的配置，具体配置请前往 Page 页面说明
     * @param array $schema
     * @return $this
     */
    public function schema(array $schema)
    {
        $this->schema = $schema;
        return $this;
    }

    /**
     * 如果想通过接口拉取，请配置。返回路径为 json>data。schema 和 schemaApi 只能二选一。
     * @param $schemaApi
     * @return $this
     */
    public function schemaApi($schemaApi)
    {
        $this->schemaApi = $schemaApi;
        return $this;
    }

    /**
     * 如果想配置个外部链接菜单，只需要配置 link 即可。
     * @param string $link
     * @return $this
     */
    public function link(string $link)
    {
        $this->link = $link;
        return $this;
    }

    /**
     * 跳转，当命中当前页面时，跳转到目标页面。
     * @param string $redirect
     * @return $this
     */
    public function redirect(string $redirect)
    {
        $this->redirect = $redirect;
        return $this;
    }

    /**
     * 改成渲染其他路径的页面，这个方式页面地址不会发生修改。
     * @param string $rewrite
     * @return $this
     */
    public function rewrite(string $rewrite)
    {
        $this->rewrite = $rewrite;
        return $this;
    }

    /**
     * 当你需要自定义 404 页面的时候有用，不要出现多个这样的页面，因为只有第一个才会有用。
     * @param string $isDefaultPage
     * @return $this
     */
    public function isDefaultPage(string $isDefaultPage)
    {
        $this->isDefaultPage = $isDefaultPage;
        return $this;
    }

    /**
     * 有些页面可能不想出现在菜单中，可以配置成 false，另外带参数的路由无需配置，直接就是不可见的。
     * @param string $visible
     * @return $this
     */
    public function visible(string $visible)
    {
        $this->visible = $visible;
        return $this;
    }

    /**
     * 菜单类名。
     * @param string $className
     * @return $this
     */
    public function className(string $className)
    {
        $this->className = $className;
        return $this;
    }
}
